package com.sbd.controller;

import com.sbd.SpringBootDeploymentApplication;
import org.junit.jupiter.api.Test;
import org.mockito.BDDMockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.util.Assert;

// 驱动Spring Boot Test工作，并指明启动类
@SpringBootTest(
        // 入口类
        classes = SpringBootDeploymentApplication.class,
        // 使用随机端口
        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

public class MockControllerTest {

    // 注入TestRestTemplate对象
    @Autowired
    // 标注为Mock测试的对象
    @MockBean
    private TestRestTemplate restTemplate = null;

    @Test
    public void testMock() {
        // 简写的URL，无需写出服务器IP和端口
        String url = "/sbd/mock/unsupport/{value}";
        // 虚拟结果对象
        String mockResult = "该方法未实现，有待后续再测";
        // 参数
        String value = "mock";
        // 对Mock对象进行声明调用的方法和参数
        BDDMockito.given(restTemplate.getForObject(url, String.class, value))
                // 使用自定义的虚拟对象，取代方法返回的结果
                .willReturn(mockResult);
        // 通过REST风格请求获取结果（会被虚拟结果对象取代）
        String result = restTemplate.getForObject(url, String.class, value);
        System.out.println(result);
        Assert.notNull(result, "判定结果为空（null）");
    }
}
